home *** CD-ROM | disk | FTP | other *** search
- #!/usr/local/bin/perl
-
- require "cgi-lib.pl";
-
- #---------------------------------------
- #REFERER LOGGER - その1(CGI版)
- # by de. 2000
- #---------------------------------------
-
- my $referer; #REFERER文字列が入る変数
- my @queue;#URL20個の配列
- my $myself="http://web.pe.to/~deyamato"; #省くアドレス
- my $logfilename="refererlog.dat";
-
- #画像を表示
- open(GIF,"./banner.gif");
- @gifdata = stat("./banner.gif");
- $byte = $gifdata[7];
- print "Content-type: image/gif\n";
- print "Content-length: $byte\n\n";
- print <GIF>;
- close(GIF);
-
- #QUERY文字列からハッシュを作る
- &ReadParse(*input);
- @val = split(/&/,$input);
- foreach $i(0 .. $#val){
- $val[$i] =~ s/%(..)/pack("c",hex($1))/ge;
- ($name,$value) = split(/=/,$val[$i],2);
- $value =~ s/\+/ /g;
- $val{$name} = $value;
- }
-
- if($ENV{HTTP_REFERER} ne ""){
- $referer = $ENV{HTTP_REFERER};
- }
-
- if($referer =~ /^http:\/\//){
- if(!($referer =~ /$myself/)){
- Getlogfile($referer);
- }
- }
-
- #終わり処理
- close(ERRLOG);
- exit(0);
-
- sub Getlogfile{
-
- ($current_url)=@_; #現在のアクセス元URL
- my $last_url; #過去の中で最新のURL
-
- my $date,count;
- my $count=0;
-
- open(LOG,$logfilename)|| print ERRLOG "LOGFILE READ ERROR\n";
- while(<LOG>){
- chop;
- &put_queue($_);
- $last_url=$_;
- }
- close LOG;
-
- #--ログのURLをチェック
- if($current_url ne $last_url){
- &put_queue($current_url);
- }
-
- #-- ログファイルにかき出す
- open(LOG,">$logfilename")|| print ERRLOG "LOGFILE WRITE ERROR\n";
- for($i=20;$i>=0;--$i){
- if($queue[$i] ne ""){
- #もし、重複するURLは記録しないならコメントをはずす
- #if($queue[$i] ne $current_url){
- print LOG "$queue[$i]\n";
- #}
- }
- }
- close(LOG);
-
- }
-
- sub put_queue{
- #print " ** put_queue!! **\n";
- for($i=20;$i>0;$i=$i-1){
- $j=$i-1;
- #print "queue$j($queue[$j]) => queue$i($queue[$i])\n";
- $queue[$i]=$queue[$i-1];
- }
- $queue[0]=$_[0];
-
- }
-